//package com.ciaojian.client.auth;
//
//import com.ciaojian.client.config.ClientApiConfig;
//import com.ciaojian.client.config.ClientApiProperties;
//import com.ciaojian.client.util.SecretHelper;
//import com.ciaojian.client.util.StringUtil;
//import org.apache.commons.lang3.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.Calendar;
//import java.util.concurrent.TimeUnit;
//
///**内部调用的token管理
// * 通过Redis存储和验证token
// *
// * @author cano
// */
//@Component
//public class TokenManager {
//
//    private static Logger log = LoggerFactory.getLogger(TokenManager.class);
//    @Autowired
//    private RedisTemplate<String, Token> redisTokenTemplate;
//    @Autowired
//    private RedisTemplate redisTemplate;
//    @Autowired
//    private ClientApiProperties clientApiProperties;
//    /**
//     * 通过 Token 实体在 Redis 中创建一个 Token
//     *
//     * @param token
//     * @return tokenKey
//     */
//    public String createToken(Token token) {
//        //jwt + 时间戳 + md5 加密
//        String timestamp = String.valueOf(Calendar.getInstance().getTimeInMillis());
//        String cipherText = SecretHelper.encodeByStyle(token.getAppId()+token.getKey()+ timestamp, "md5");
//        //存到 redis 里面 设置30分钟的时间限制  value 格式为 userId_custId_parentCustId_时间戳
////        redisTokenTemplate.opsForValue().set(cipherText, token, 1L, TimeUnit.HOURS);
//        redisTemplate.opsForValue().set(cipherText,timestamp,60, TimeUnit.MINUTES);
//        return cipherText;
//    }
//
//    /**
//     * 通过 key 获取Token
//     *
//     * @return Token 实体
//     */
//    public Token getToken(HttpServletResponse response) {
//        String header = response.getHeader(ClientApiConfig.JWT_TOKEN_HEADER_PARAM);
//        Token token=null;
//        String tokenKey = header.replaceAll(ClientApiConfig.JWT_TOKEN_HEADER_PREFIX, "");
//        //如果key长度超过md5码长度即解码返回
//        if (StringUtils.isNotBlank(tokenKey)) {
//            token = redisTokenTemplate.opsForValue().get(tokenKey);
//            return token;
//        }
//        return token;
//    }
////    public String getToken() {//采用发起放签发token必须在同一个redis下
////        String tokenkey = null;
////        try {
////            tokenkey= String.valueOf(redisTemplate.opsForValue().get(ClientApiConfig.MANAGER_TOKENKEY));
////            if (tokenkey!=null&&!"null".equals(tokenkey)&& StringUtils.isNotBlank(tokenkey)) {
////                return ClientApiConfig.JWT_TOKEN_HEADER_PREFIX +tokenkey;
////            }
////            Token token=new Token();
////            token.setAppId(Long.parseLong(managerApiProperties.getManager().getSaasAppId()));
////            token.setKey(managerApiProperties.getManager().getSaasKey());
////            token.setCurrentTimeMillis(System.currentTimeMillis());
////            tokenkey=  createToken(token);
////            redisTemplate.opsForValue().set(ClientApiConfig.MANAGER_TOKENKEY,tokenkey,50, TimeUnit.MINUTES);
////            tokenkey = ClientApiConfig.JWT_TOKEN_HEADER_PREFIX + tokenkey;
////        } catch (Exception e) {
////            log.error("=========>获取Token异常；", e);
////        }
////        return tokenkey;
////    }
//    /**
//     * 判断Token 是否有效
//     *
//     * @param tokenKey
//     * @return boolean 值
////     */
//    public boolean checkToken(String tokenKey) {
//        if (tokenKey == null) {
//            return false;
//        }
//        log.info("##tokenKey###"+tokenKey);
//       String token= String.valueOf(redisTemplate.opsForValue().get(tokenKey));
////        Token token = redisTokenTemplate.opsForValue().get(tokenKey);
//        log.info("##token##"+ StringUtil.objectToString(token));
//        if (token == null||!StringUtil.chkInt(token)) {
//            return false;
//        }
//        //如果验证成功，说明此用户进行了一次有效操作，延长token的过期时间,加一分钟
////        Long minutes = redisTokenTemplate.getExpire(tokenKey, TimeUnit.MINUTES);
////        redisTokenTemplate.expire(tokenKey, minutes + 1L, TimeUnit.MINUTES);
//        return true;
//    }
//
//    /**
//     * 清除原token操作
//     * 并非直接清除,而是设置了5分钟过期时间,该缓存将会在5分钟后过期
//     *
//     * @param request
//     * @return
//     */
//    public boolean cleanToken(HttpServletRequest request) {
//        String header = request.getHeader(ClientApiConfig.JWT_TOKEN_HEADER_PARAM);
//        String tokenKey = header.replace(ClientApiConfig.JWT_TOKEN_HEADER_PREFIX, "");
////        if (!checkToken(tokenKey, "")) {
////            return false;
////        }
//        redisTokenTemplate.expire(tokenKey, 5L, TimeUnit.MINUTES);
//        return true;
//    }
//    public boolean delToken(HttpServletRequest request) {
//        String header = request.getHeader(ClientApiConfig.JWT_TOKEN_HEADER_PARAM);
//        String tokenKey = header.replace(ClientApiConfig.JWT_TOKEN_HEADER_PREFIX, "");
//        redisTokenTemplate.delete(tokenKey);
//        return true;
//    }
//    //是测试则返回true，否则为正式
//    public boolean isTest(HttpServletRequest request) {
////        if(request.getServerPort()==39004){//测试应用
////            return true;
////        }
//        return false;
//    }
//}
